<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 回调函数    把一个函数当做了参数    callback


        // sort(function(a,b) {return a - b}) 
        // sort这个函数来说，整个匿名函数都是实参     


        // setInterval(function(){} , 1000) ;   // 这个匿名函数也是1s之后由系统调用


        // function setInterval(f , time) {
        //     // time时间以后
        //     // f()
        // }



        // setInterval(fn , 1000) ;    // fn这个函数是1s之后系统调用    fn也是定时器的回调函数


        // function fn() {
        //     console.log(666);
        // }



        // document.onclick = fn ;










        // function f1(a) {
        //     document.write('学习Js真快乐') ;
        //     // 
        //     // alert(true) ;
        //     // alert(false) ;
        //     alert(a) ;   // 布尔值
        // }


        // function f1(a) {
        //     document.write('学习Js真快乐') ;
        //     // 
        //     // alert('真的简单') ;
        //     // alert('真的吗?') ;    
        //     alert(a) ;     // 字符串
        // }



        function f1(a) {
            document.write('学习Js真快乐') ;
            // 
            // alert('真的吗') ;
            // console.log('真的吗?') ;  

            // 需要把这一句话提取成参数
        }


        // 数据类型   number   string   boolean
        // 引用类型  array  object  function(代码块)


        function f1(f) {
            document.write('学习Js真快乐') ;
            f('真的吗？') ;   // f必须是一个函数
            // setTimeout(f , 1000) ;
        }


        f1(function(){
            alert('真的吗') ;
        })


        f1(function(m){
            console.log(m);
        })



        function fn() {
            console.log('回调懂了吗?');
        }


        f1(fn) ;







    </script>
    
</body>
</html>